package com.lihf.redis;

import java.io.Serializable;
public class RedisUtil {
//
//
//    /** redisTemplate */
//    private static RedisTemplate<Serializable, Serializable> redisTemplate = (RedisTemplate<Serializable, Serializable>) ArteryUtil
//            .getBean("redisTemplate");
//
//    /**
//     * patternGet<br>
//     * 谨慎使用<br>
//     * 
//     * @param patternKey
//     */
//    public static Set<String> patternKeys(String patternKey) {
//        Set<Serializable> keysSerializable = redisTemplate.keys(patternKey);
//        Set<String> keysString = new HashSet<String>();
//        if (CollectionUtils.isEmpty(keysSerializable)) {
//            return keysString;
//        }
//        for (Serializable keySerializable : keysSerializable) {
//            keysString.add(keySerializable.toString());
//        }
//        return keysString;
//    }
//
//    /**
//     * patternDelete<br>
//     * 谨慎使用<br>
//     * 
//     * @param patternKey
//     */
//    public static void patternDelete(String patternKey) {
//        Set<String> keys = patternKeys(patternKey);
//        keys.forEach(key -> delete(key));
//    }
//
//    /**
//     * patternGet<br>
//     * 谨慎使用<br>
//     * 
//     * @param key
//     */
//    @SuppressWarnings({ "unchecked", "hiding" })
//    public static <T> T patternGet(String patternKey) {
//        Set<String> keys = patternKeys(patternKey);
//        Set<T> result = new HashSet<T>();
//        keys.forEach(key -> result.add(get(key)));
//        return (T) result;
//    }
//
//    /**
//     * 保存（有过期时间）
//     *@param key
//     *@param value
//     *@param ttl
//     *@date 2017年7月3日 上午9:36:28
//     */
//    public static void saveWithTtl(final String key, Object value, long ttl) {
//        final byte[] vbytes = SerializeUtil.serialize(value);
//        redisTemplate.execute(new RedisCallback<Object>() {
//            @Override
//            public Object doInRedis(RedisConnection connection) throws DataAccessException {
//                byte[] kbytes = redisTemplate.getStringSerializer().serialize(key);
//                connection.set(kbytes, vbytes);
//                if (ttl > 0) {
//                    connection.expire(kbytes, ttl);
//                }
//                return null;
//            }
//        });
//    }
//
//    /**
//     * 返回自增的key值
//     *@param value
//     *@param ttl
//     *@return
//     *@date 2017年7月3日 下午3:49:26
//     */
//    @SuppressWarnings("hiding")
//    public static <T> T getIncrKey() {
//        final byte[] incrbytes = SerializeUtil.serialize(KeyGenerater.keyIncrByRedis());
//        return redisTemplate.execute(new RedisCallback<T>() {
//            @Override
//            @SuppressWarnings("unchecked")
//            public T doInRedis(RedisConnection connection) throws DataAccessException {
//                Long key = connection.incr(incrbytes);
//                return (T) key;
//            }
//        });
//    }
//
//    /**
//    * 保存
//    * 
//    * @param key
//    * @param value
//    * @param ttl
//    */
//    public static void save(final String key, Object value) {
//        saveWithTtl(key, value, -1);
//    }
//
//    public static void saveToHash(String key, String field, Object value) {
//        redisTemplate.opsForHash().put(key, field, value);
//    }
//
//    public static Object getFromHash(String key, String field) {
//        return redisTemplate.opsForHash().get(key, field);
//    }
//
//    public static Object deleteFromHash(String key, String field) {
//        Object value = getFromHash(key,field);
//        if(null != value){
//            redisTemplate.opsForHash().delete(key, field);
//        }
//        return value;
//    }
//
//    public static <T> T get(final String key) {
//        return get(key, false);
//    }
//
//    /**
//     * 获取
//     * 
//     * @param key
//     * @return
//     */
//    @SuppressWarnings("hiding")
//    public static <T> T get(final String key, boolean delete) {
//        return redisTemplate.execute(new RedisCallback<T>() {
//            @SuppressWarnings("unchecked")
//            @Override
//            public T doInRedis(RedisConnection connection) throws DataAccessException {
//                byte[] keybytes = redisTemplate.getStringSerializer().serialize(key);
//                if (connection.exists(keybytes)) {
//                    byte[] valuebytes = connection.get(keybytes);
//                    T value = (T) SerializeUtil.unserialize(valuebytes);
//                    if (delete) {
//                        connection.del(keybytes);
//                    }
//                    return value;
//                }
//                return null;
//            }
//        });
//    }
//
//    /**
//     * 批量获取
//     * 
//     * @param key
//     * @return
//     */
//    @SuppressWarnings("hiding")
//    public static <T> T batchGet(final List<String> keys) {
//        return redisTemplate.execute(new RedisCallback<T>() {
//            @SuppressWarnings("unchecked")
//            @Override
//            public T doInRedis(RedisConnection connection) throws DataAccessException {
//                byte[][] byteKeys = new byte[keys.size()][128];
//                for (int index = 0; index < keys.size(); ++index) {
//                    byteKeys[index] = redisTemplate.getStringSerializer().serialize(keys.get(index));
//                }
//                List<byte[]> byteValus = connection.mGet(byteKeys);
//                List<T> result = new ArrayList<T>();
//                for (byte[] byteValue : byteValus) {
//                    T value = null;
//                    if (null != byteValue) {
//                        value = (T) SerializeUtil.unserialize(byteValue);
//                    }
//                    result.add(value);
//                }
//                return (T) result;
//            }
//        });
//    }
//
//    /**
//     * 删除
//     * 
//     * @param key
//     * @return
//     */
//    public static void delete(final String key) {
//        redisTemplate.execute(new RedisCallback<T>() {
//            @Override
//            public T doInRedis(RedisConnection connection) throws DataAccessException {
//                byte[] keybytes = redisTemplate.getStringSerializer().serialize(key);
//                connection.del(keybytes);
//                return null;
//            }
//        });
//    }
//
}
